package space.lichenpark.unfamiliar.components.influx.core;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 聚合方法枚举
 *
 * @author lichen
 */
@Getter
@AllArgsConstructor
public enum FnEnum {

    /**
     * 最后一个值
     */
    LAST("last", " |> last() ", false),
    /**
     * 第一个值
     */
    FIRST("first", " |> first() ", false),
    /**
     * 平均值
     */
    MEAN("mean", " |> mean() ", false),
    /**
     * 最大值
     */
    MAX("max", " |> max() ", false),
    /**
     * 最小值
     */
    MIN("min", " |> min() ", false),
    /**
     * 求和
     */
    SUM("sum", " |> sum() ", false),
    /**
     * 计数
     */
    COUNT("count", " |> count() ", false),
    /**
     * 标准差
     */
    STDDEV("stddev", " |> stddev() ", false),

    /**
     * 中位数
     */
    MEDIAN("median", " |> median() ", false),
    /**
     * 众数
     */
    MODE("mode", " |> mode() ", false),
    /**
     * 去重
     */
    DISTINCT("distinct", " |> distinct() ", false),
    /**
     * 计算单调递增序列的增量
     */
    INCREASE("increase", " |> increase() ", true),

    /**
     * 计算累计总和
     */
    CUMULATIVE_SUM("cumulativeSum", " |> cumulativeSum() ", true),
    /**
     * 差值
     */
    DIFFERENCE("difference", " |> difference() ", true);

    /**
     * 在AggregateWindow中的写法
     */
    private final String displayInAggregateWindow;
    /**
     * 在AggregateWindow外单独的查询中的写法
     */
    private final String displayForStandAlone;
    /**
     * 是否只能单独使用（不允许在AggregateWindow内使用）
     */
    private final boolean onlyStandAlone;
}
